package com.uzhie.web.dao;

import com.uzhie.web.module.User;
import com.uzhie.web.module.UserRole;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * 用户数据库操作
 * Created by lilongfei on 2018/7/12.
 */
public interface UserDAO extends Mapper<User> {
    /**
     * 通过账户密码查询用户
     * create by lilongfei
     * @param userName 登录用户名
     * @param password 密码
     * @return 查询到的用户对象
     */
     User findByNameAndPwd(@Param(value = "userName") String userName, @Param(value = "password") String password);

    /**
     * 绑定用户与角色
     * create by lilongfei
     * @param urs 登录用户名
     * @return
     */
    int bindUserRoles(@Param(value = "list")List<UserRole> urs);

    /**
     * 通过用户ID绑定用户与角色关系
     * create by lilongfei
     * @param userId 需要删除的关系ID集合
     * @return
     */
    int unBindUserRoles(@Param(value = "userId")String userId);


    /**
     * 修改当前用户状态
     * create by lilongfei
     * @param userId 用户ID
     * @param status 用户状态
     * @return
     */
    int updateStatusByUserId(@Param(value = "userId") String userId, @Param(value = "status") int status);

    /**
     * 修改当前用户状态
     * create by lilongfei
     * @param userIds 用户ID集合
     * @param status 用户状态
     * @return
     */
    int updateStatusByUserIds(@Param(value = "list") List<User> userIds, @Param(value = "status") int status);

    /**
     * 用户查询方法
     * create by lilongfei
     * @param userName 用户账号
     * @param realName 用户名称
     * @param deptName 部门目录名称
     * @param roleName 角色名称
     * @param startTime 创建时间周期:起始时间
     * @param endTime 创建时间周期:结束时间
     * @param page 分页参数
     * @return 查询出来的user集合
     */
    List<User> queryUserList(@Param("list") List<String> departId,
            @Param("userName") String userName, @Param("realName") String realName,
                             @Param("deptName") String deptName, @Param("roleName") String roleName,
                             @Param("startTime") String startTime, @Param("endTime") String endTime,
                             RowBounds page);

    /**
     * 查询用户总数
     * create by lilongfei
     * @return
     */
    int queryCount();
}
